From: Keir Fraser Date: Wed, 1 Apr 2009 13:04:46 +0000 (+0100) Subject: x86 hpet: two more fixes for c/s 19419 X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~13989^2~17 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=885b76a5fbdedcebc15b52aaa9711c9da8fd8026;p=xen.git x86 hpet: two more fixes for c/s 19419 vector_channel[], as its name already says, is vector-, not irq-indexed. hpet_assign_irq() sits not only in the boot path, but also in the resume one. Short of knowing why this is, simply checking whether a vector was already assigned prevents leaking previously assigned ones. Signed-off-by: Jan Beulich --- diff --git a/xen/arch/x86/hpet.c b/xen/arch/x86/hpet.c index ea7c5be144..7671634ef2 100644 --- a/xen/arch/x86/hpet.c +++ b/xen/arch/x86/hpet.c @@ -45,7 +45,7 @@ static unsigned int num_hpets_used; /* msi hpet channels used for broadcast */ DEFINE_PER_CPU(struct hpet_event_channel *, cpu_bc_channel); -static int vector_channel[NR_IRQS] = {[0 ... NR_IRQS-1] = -1}; +static int vector_channel[NR_VECTORS] = {[0 ... NR_VECTORS-1] = -1}; #define vector_to_channel(vector) vector_channel[vector] @@ -345,6 +345,9 @@ static int hpet_assign_irq(struct hpet_event_channel *ch) { int vector; + if ( ch->vector ) + return 0; + if ( (vector = assign_irq_vector(AUTO_ASSIGN_IRQ)) < 0 ) return vector;